HackerRank Almost Sorted
https://www.hackerrank.com/challenges/almost-sorted/problem
提出
8/25 test cases failed :(
code: python
#!/bin/python3
import math
import os
import random
import re
import sys
import copy
#
# Complete the 'almostSorted' function below.
#
# The function accepts INTEGER_ARRAY arr as parameter.
#
def almostSorted(arr):
# Write your code here
# try swap
swap_index = -1, -1
swap_arr = copy.copy(arr)
for i in range(len(arr)-1):
if (swap_arri > swap_arri+1):
swap_index = i, i+1
break
swap_arr[swap_index0], swap_arr[swap_index1] = swap_arr[swap_index1], swap_arr[swap_index0]
check_swap_arr = sorted(swap_arr)
if (swap_arr == check_swap_arr):
print("yes")
print("swap", swap_index0 + 1, swap_index1 + 1)
exit()
# try reverse
reverse_index = -1, -1
reverse_arr = copy.copy(arr)
flag = True
for i in range(len(arr)-1):
if (flag):
if (reverse_arri > reverse_arri+1):
reverse_index = i, -1
for j in range(i+1, len(arr)):
if (reverse_arrj > reverse_arr[reverse_index0]):
reverse_index1 = j-1
flag = False
break
else:
pass
reverse_part_arr = reverse_arr[reverse_index0:reverse_index1+1]
reverse_arr = reverse_arr[:reverse_index0] + list(reversed(reverse_part_arr)) + reverse_arr[reverse_index1+1:]
reverse_check_arr = sorted(reverse_arr)
if (reverse_check_arr == reverse_arr):
print("yes")
print("reverse", reverse_index0 + 1, reverse_index1 + 1)
exit()
print("no")
if __name__ == '__main__':
n = int(input().strip())
arr = list(map(int, input().rstrip().split()))
almostSorted(arr)
解答
code: python
#!/bin/python3
import math
import os
import random
import re
import sys
from copy import *
#
# Complete the 'almostSorted' function below.
#
# The function accepts INTEGER_ARRAY arr as parameter.
#
def almostSorted(arr):
# Write your code here
sortarr = deepcopy(arr)
sortarr.sort()
# if the array is already sorted
if sortarr == arr:
print("yes")
return
# if the array can be sorted
l = r = -1
# left index
for i in range(n-1):
if arri > arri+1:
l = i
break
# right index
for i in range(n-1, 0, -1):
if arri < arri-1:
r = i
break
# check for swap
temp = deepcopy(arr)
# swap
templ, tempr = tempr, templ
if temp == sortarr:
print("yes")
print("swap", l+1, r+1)
return
# check for reverse
temp = deepcopy(arr)
# reverse
temp = temp:l + templ:r+1::-1 + tempr+1:
if temp == sortarr:
print("yes")
print("reverse", l+1, r+1)
return
# arra can't be sorted
print("no")
if __name__ == '__main__':
n = int(input().strip())
arr = list(map(int, input().rstrip().split()))
almostSorted(arr)
メモ
https://www.youtube.com/watch?v=SyVUe7h4zho
提出
code: python
#!/bin/python3
import math
import os
import random
import re
import sys
import copy
#
# Complete the 'almostSorted' function below.
#
# The function accepts INTEGER_ARRAY arr as parameter.
#
def almostSorted(arr):
# Write your code here
decNum = []
for i in range(1, len(arr)):
if arri < arri-1:
# if decNum-1 != -1 and decNum-1 != i-1:
# print("no")
# exit()
decNum.append(i)
# 5
# 4 100 8 9 5
# decNum.pop(0)
if len(decNum) == 0:
print("yes")
exit()
elif len(decNum) == 1:
carr = copy.deepcopy(arr)
index = decNum0
carrindex, carrindex-1 = carrindex-1, carrindex
if sorted(carr) == carr:
print("yes")
print("swap", index, index+1)
else:
print("no")
elif len(decNum) == 2:
carr = copy.deepcopy(arr)
firstIndex = decNum0
lastIndex = decNum1
carrfirstIndex-1, carrlastIndex = carrlastIndex, carrfirstIndex-1
if sorted(carr) == carr:
print("yes")
print("swap", firstIndex, lastIndex+1)
else:
print("no")
else:
firstIndex = decNum0
lastIndex = decNum-1
if firstIndex + len(decNum) -1 != lastIndex:
print("no")
exit()
# 7
# 1 2 6 5 4 3 7
# 3, 4, 5
# 5
# 5 4 3 2 6
# 1, 2, 3
if firstIndex == 1 and lastIndex == len(arr) - 1:
print("yes")
print("reverse", 1, len(arr) - 1)
elif firstIndex == 1:
if arrfirstIndex-1 <= arrlastIndex+1:
print("yes")
print("reverse", firstIndex, lastIndex+1)
else:
print("no")
elif lastIndex == len(arr) - 1:
if arrlastIndex >= arrfirstIndex-2:
print("yes")
print("reverse", firstIndex, lastIndex+1)
else:
print("no")
else:
if arrfirstIndex-1 <= arrlastIndex+1 and arrlastIndex >= arrfirstIndex-2:
print("yes")
print("reverse", firstIndex, lastIndex+1)
else:
print("no")
if __name__ == '__main__':
n = int(input().strip())
arr = list(map(int, input().rstrip().split()))
almostSorted(arr)